gl: Allow setting min/mag filter on textures
authorMatthias Clasen <mclasen@redhat.com>
Sun, 2 Jun 2019 16:47:57 +0000 (16:47 +0000)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 4 Jun 2019 23:00:01 +0000 (23:00 +0000)
This will be used in the future.
Adapt all callers to pass GL_NEAREST for now.

gsk/gl/gskgldriver.c
gsk/gl/gskgldriverprivate.h
gsk/gl/gskglglyphcache.c
gsk/gl/gskgliconcache.c
gsk/gl/gskglimage.c
gsk/gl/gskglimageprivate.h

index 276f01fc6c385ea9c89c222e713d8957532665ae..321681d507c60a0bf129ea0b02513be301051dc3 100644 (file)
@@ -669,7 +669,7 @@ gsk_gl_driver_create_render_target (GskGLDriver *self,
 
   texture_id = gsk_gl_driver_create_texture (self, width, height);
   gsk_gl_driver_bind_source_texture (self, texture_id);
-  gsk_gl_driver_init_texture_empty (self, texture_id);
+  gsk_gl_driver_init_texture_empty (self, texture_id, GL_NEAREST, GL_NEAREST);
 
   render_target = create_render_target (self, texture_id, FALSE, FALSE);
 
@@ -727,7 +727,9 @@ gsk_gl_driver_destroy_texture (GskGLDriver *self,
 
 void
 gsk_gl_driver_init_texture_empty (GskGLDriver *self,
-                                  int          texture_id)
+                                  int          texture_id,
+                                  int          min_filter,
+                                  int          mag_filter)
 {
   Texture *t;
 
@@ -746,6 +748,9 @@ gsk_gl_driver_init_texture_empty (GskGLDriver *self,
       return;
     }
 
+  t->min_filter = min_filter;
+  t->mag_filter = mag_filter;
+
   gsk_gl_driver_set_texture_parameters (self, t->min_filter, t->mag_filter);
 
   if (gdk_gl_context_get_use_es (self->gl_context))
index 1e57a855f1edb535bce6bc00ea6e9fd4f669157b..83d0c46af94f1726c3391886fb480824017b3093 100644 (file)
@@ -53,7 +53,9 @@ void            gsk_gl_driver_bind_source_texture       (GskGLDriver     *driver
                                                          int              texture_id);
 
 void            gsk_gl_driver_init_texture_empty        (GskGLDriver     *driver,
-                                                         int              texture_id);
+                                                         int              texture_id,
+                                                         int              min_filter,
+                                                         int              max_filter);
 void            gsk_gl_driver_init_texture_with_surface (GskGLDriver     *driver,
                                                          int              texture_id,
                                                          cairo_surface_t *surface,
index 0f39df607bba0b9e9178e6e39bee0e0a76374e24..697d266185c7b53b1b82a013e5bd235fe106dd97 100644 (file)
@@ -366,7 +366,7 @@ gsk_gl_glyph_cache_get_glyph_image (GskGLGlyphCache        *self,
 
   if (atlas->image.texture_id == 0)
     {
-      gsk_gl_image_create (&atlas->image, self->gl_driver, atlas->width, atlas->height);
+      gsk_gl_image_create (&atlas->image, self->gl_driver, atlas->width, atlas->height, GL_NEAREST, GL_NEAREST);
       gdk_gl_context_label_object_printf (gsk_gl_driver_get_gl_context (self->gl_driver),
                                           GL_TEXTURE, atlas->image.texture_id,
                                           "Glyph atlas %d", atlas->image.texture_id);
index 267ac7c6378ad4b9f2bd211540cfe62583425303..424ee9102a93a46a0acc097183fc762d8888d136 100644 (file)
@@ -2,6 +2,8 @@
 #include "gskgltextureatlasprivate.h"
 #include "gdk/gdktextureprivate.h"
 
+#include <epoxy/gl.h>
+
 #define ATLAS_SIZE    (1024)
 #define MAX_FRAME_AGE (5 * 60)
 #define MAX_UNUSED_RATIO 0.8
@@ -179,7 +181,7 @@ gsk_gl_icon_cache_lookup_or_add (GskGLIconCache  *self,
         /* No atlas has enough space, so create a new one... */
         atlas = g_malloc (sizeof (GskGLTextureAtlas));
         gsk_gl_texture_atlas_init (atlas, ATLAS_SIZE, ATLAS_SIZE);
-        gsk_gl_image_create (&atlas->image, self->gl_driver, atlas->width, atlas->height);
+        gsk_gl_image_create (&atlas->image, self->gl_driver, atlas->width, atlas->height, GL_NEAREST, GL_NEAREST);
         /* Pack it onto that one, which surely has enought space... */
         gsk_gl_texture_atlas_pack (atlas, twidth + 2, theight + 2, &packed_x, &packed_y);
         packed_x += 1;
index 86e6c0de9d836890479647057ac10659a04c2783..71d7bce2a345d77ee876326157cdd7383c9d5fef 100644 (file)
@@ -6,14 +6,16 @@ void
 gsk_gl_image_create (GskGLImage  *self,
                      GskGLDriver *gl_driver,
                      int          width,
-                     int          height)
+                     int          height,
+                     int          min_filter,
+                     int          mag_filter)
 {
   self->texture_id = gsk_gl_driver_create_texture (gl_driver, width, height);
   self->width = width;
   self->height = height;
 
   gsk_gl_driver_bind_source_texture (gl_driver, self->texture_id);
-  gsk_gl_driver_init_texture_empty (gl_driver, self->texture_id);
+  gsk_gl_driver_init_texture_empty (gl_driver, self->texture_id, min_filter, mag_filter);
   gsk_gl_driver_mark_texture_permanent (gl_driver, self->texture_id);
 }
 
index d9da860df37554a7497c1bfcba0de6aa32ba690f..3d706723b8ed7ac9447326c7a2cd3ce761b5e90a 100644 (file)
@@ -24,7 +24,9 @@ typedef struct
 void gsk_gl_image_create         (GskGLImage           *self,
                                   GskGLDriver          *gl_driver,
                                   int                   width,
-                                  int                   height);
+                                  int                   height,
+                                  int                   min_filter,
+                                  int                   mag_filter);
 void gsk_gl_image_destroy        (GskGLImage           *self,
                                   GskGLDriver          *gl_driver);
 void gsk_gl_image_write_to_png   (const GskGLImage     *self,